<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>逻辑运算符</title>
    <script>
        /* 
            && 逻辑与
                - 可以对两个值进行与运算
                - 当&&左右都为true时，则返回true，否则返回false
                - 与运算是短路的与，如果第一个值为false，则不看第二个值
                - 与运算是找false的，如果找到false则直接返回，没有false才会返回true
                - 对于非布尔值进行与运算，它会转换为布尔值然后运算
                    但是最终会返回原值
                    - 如果第一个值为false，则直接返回第一个值
                        如果第一个值为true，则返回第二个值

            || 逻辑或
                - 可以对两个值进行或运算
                - 当||左右有true时，则返回true，否则返回false
                - 或运算也是短路的或，如果第一个值为true，则不看第二个值
                - 或运算是找true，如果找到true则直接返回，没有true才会返回false
                - 对于非布尔值或运算，它会转换为布尔值然后运算
                    但是最终会返回原值
                    - 如果第一个值为true，则返回第一个
                        如果第一个值为false，则返回第二个
        */

        let result = true && true // true
        result = true && false // false
        result = false && true // false
        result = false && false // false

        // true && alert(123) // 第一个值为true，alert会执行
        false && alert(123) // 第一个值为false，alert不会执行

        //       true && true  -> true
        result = 1 && 2 // 2 
        //       true && false -> false
        result = 1 && 0 // 0
        //       false && false -> false 
        result = 0 && NaN // 0


        result = true || false // true
        result = false || true // true
        result = true || true // true
        result = false || false // false

        // false || alert(123) // 第一个值为false，alert会执行
        true || alert(123) // 第一个值为true，alert不会执行

        result = 1 || 2 // 1
        result = "hello" || NaN // "hello"
        result = NaN || 1 // 1
        result = NaN || null // null

        console.log(result)
        
        

    </script>
</head>
<body>
    
</body>
</html>